
#ifndef APP_MSG_H
#define APP_MSG_H

#include <stdint.h>
#include <stdbool.h>
#include "nst_msg.h"

#define MIDI_MSG_QUEUE_SIZE      128
#define UART_MSG_DATA_MAX_LEN    64

#define UART_RX_MSG_QUEUE_SIZE   4
#define UART_TX_MSG_QUEUE_SIZE   4

#define UART_PORT_COUNT          3

// MIDI 消息结构体
typedef struct 
{
    uint8_t data[3];
} midi_msg_t;

typedef struct {
    uint8_t src_port;        // 来源端口
    uint16_t data_len;
    uint8_t data[UART_MSG_DATA_MAX_LEN];
} uart_rx_msg_t;

typedef struct {
    uint16_t data_len;
    uint8_t data[UART_MSG_DATA_MAX_LEN];        // 发送数据缓冲区
} uart_tx_msg_t;

/* 队列实例 */
extern nst_msg_queue_t midi_queue;
extern nst_msg_queue_t uart_rx_queue;
extern nst_msg_queue_t uart_tx_queues[UART_PORT_COUNT];

// 初始化队列
void app_msg_init(void);

// MIDI 队列操作函数
bool app_msg_enqueue(nst_msg_queue_t *queue, void *msg);
bool app_msg_dequeue(nst_msg_queue_t *queue, void *msg);
bool app_msg_is_empty(nst_msg_queue_t *queue);
bool app_msg_is_full(nst_msg_queue_t *queue);


#endif // APP_MSG_H
